#ifndef __WaterEmitter_h_
#define __WaterEmitter_h_

#include <OgreRoot.h>
#include "NxOgre.h"
#include "NxOgreFluid.h"
#include "NxOgreFluidEmitter.h"
#include "critter.h"

class WaterEmitter
{

public:
	WaterEmitter(Ogre::String name, Critter::RenderSystem*  mRenderSystem, Ogre::SceneManager *mSceneMgr);
	~WaterEmitter(void);
	void setStatic(void);

	Ogre::String getName(void);
	void setName(Ogre::String name);
	NxOgre::FluidEmitter*   getEmitter(void);
	NxOgre::Fluid*			getFluid(void);
	Critter::RenderSystem*  getRenderSystem(void);
		


	void setEmitterParameters(void);
	void makeWaterEmitter(void);
	NxOgre::Vec3 getPosition(void);
	void setPosition(NxOgre::Vec3 position);


	 //fluid parameters
	 unsigned int mMaxParticles;
	 NxOgre::Real mKernelRadiusMultiplier;
	 NxOgre::Real mRestParticlesPerMetre;
	 NxOgre::Real mMotionLimitMultiplier;
	 unsigned int mPacketSizeMultiplier;
	 NxOgre::Real mCollisionDistanceMultiplier;
	 NxOgre::Real mStiffness;
	 NxOgre::Real mViscosity;
	 NxOgre::Real mRestDensity;
	 unsigned int mSimulationMethod;

	 //emitter parameters
	 NxOgre::Real mPoseX;
	 NxOgre::Real mPoseY;
	 NxOgre::Real mPoseZ;
	 NxOgre::Enums::FluidEmitterShape mShape;
	 NxOgre::Real mParticleLifetime;
	 NxOgre::Real mRate;
	 NxOgre::Real mFluidSpeed;
	 NxOgre::Enums::FluidEmitterType mType;
	 NxOgre::Real mReplusionCoefficient;
	 NxOgre::Real mDimensionX;
	 NxOgre::Real mDimensionY;
	 NxOgre::Real mParticleSize;

private:
	 Ogre::Entity *emitterEntity;
	 Ogre::SceneNode *emitterSceneNode;

	 Ogre::String name;
	 Critter::RenderSystem*  mRenderSystem;
	 NxOgre::Fluid*          mFluid;
	 NxOgre::FluidEmitter*   mEmitter;
};

#endif // #ifndef __WaterEmitter_h_
